﻿<!DOCTYPE HTML>
<html lang="zh">
<head>
<title>数组 对象 - 方法 &amp; 属性 | AutoHotkey v2</title>
<meta name="description" content="An 数组 对象 contains a list or sequence of values." />
<meta name="ahk:equiv-v1" content="objects/Object.htm" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
<script type="text/javascript">$(function(){0<=window.navigator.userAgent.toLowerCase().indexOf("ucbrowser")&&CaoNiMaDeUc()})</script>
</head>
<body>

<h1>数组 对象</h1>

<p><strong>数组(数组)</strong> 对象包含值的列表或序列.</p>
<p>值由它们在数组中的位置(称为 <em>数组索引</em>) 来表示, 其中位置 1 是第一个元素.</p>
<p>数组通常是通过将值的列表括在方括号中来创建的. 例如:</p>
<pre>veg := ["Asparagus", "Broccoli", "Cucumber"]
循环 veg.长度
    信息框 veg[内_循环次数]</pre>
<p>负索引可用于反向处理元素, 因此 -1 是最后一个元素, -2 是倒数第二个元素, 依此类推.</p>
<p>尝试使用超出范围的数组索引(例如零, 或者其绝对值大于数组的 <a href="#Length">长度</a>) 被视为错误, 并将导致抛出异常. 向数组添加新元素的最佳方法是调用 <a href="#InsertAt">插入</a> 或 <a href="#Push">置入</a>. 例如:</p>
<pre>users := 数组()
users.置入 内_用户名
信息框 users[1]</pre>
<p>也可以通过为 <a href="#Length">长度</a> 指定更大的值来扩展数组. 这些索引是有效的, 但是 <a href="#Has">包含</a> 将显示新元素没有值. 元素没有值通常用于<a href="../Functions.htm#VariadicCall">可变参数调用</a>或<a href="../Functions.htm#Variadic">可变参数函数</a>, 但也可以被用于任何目的.</p>
<p>下面的文档使用 <code>Arr</code> 作为任何数组对象的占位符. 注意, "array" 不应该用作变量名, 因为它是用来引用数组类本身的.</p>
<p>数组对象基于 <code>数组.Prototype</code>, 而其基于 <code>对象.Prototype</code>. 除了从 <a href="Object.htm">对象</a> 继承的方法和属性外, 数组对象还具有以下预定义的方法和属性:</p>

<p><strong>方法:</strong></p>
<ul>
  <li><a href="#Clone">复制</a></li>
  <li><a href="#Delete">删除</a></li>
  <li><a href="#Has">包含</a></li>
  <li><a href="#InsertAt">插入</a></li>
  <li><a href="#Pop">取出</a></li>
  <li><a href="#Push">置入</a></li>
  <li><a href="#RemoveAt">移除</a></li>
  <li><a href="#__Enum">__枚举</a></li>
  <li><a href="#__New">__新建</a></li>
</ul>
<p><strong>属性:</strong></p>
<ul>
  <li><a href="#Length">长度</a></li>
  <li><a href="#Capacity">容量</a></li>
  <li><a href="#__Item">__项</a></li>
</ul>
<p><strong>函数:</strong></p>
<ul>
  <li><a href="#Array">数组</a></li>
</ul>

<h2 id="Methods">方法</h2>

<div class="methodShort" id="Clone"><h2>复制</h2>
<p>返回对象的一个浅拷贝.</p>
<pre class="Syntax">复制 := Arr.<span class="func">复制</span>()</pre>
<p>所有数组元素都被复制到新数组. 对象 <em>引用</em> 被复制(就像普通的赋值一样), 而不是对象本身.</p>
<p>根据 <a href="Object.htm#Clone">Obj.复制</a> 来复制自有的属性, 方法和基.</p>
</div>

<div class="methodShort" id="Delete"><h2>删除</h2>
<p>删除数组元素的值, 使索引不包含值.</p>
<pre class="Syntax">Arr.<span class="func">删除</span>(Index)</pre>
<dl>
  <dt>Index</dt>
  <dd>
    <p>类型: <a href="../Concepts.htm#numbers">整数</a></p>
    <p>一个有效的数组索引.</p>
  </dd>
  <dt>返回值</dt>
  <dd><p>删除的值.</p></dd>
</dl>
<p>删除 不影响数组的 <a href="#Length">长度(长度)</a>.</p>
</div>

<div class="methodShort" id="Has"><h2>包含</h2>
<p>如果 <i>Index</i> 有效且在该位置有一个值, 则返回 true, 否则返回 false.</p>
<pre class="Syntax">Arr.<span class="func">包含</span>(Index)</pre>
</div>

<div class="methodShort" id="InsertAt"><h2>插入</h2>
<p>插入一个或多个值到给定位置.</p>
<pre class="Syntax">Arr.<span class="func">插入</span>(Index, Value1 <span class="optional">, Value2, ... Value<i>N</i></span>)</pre>
<dl>
  <dt>Index</dt>
  <dd>
    <p>类型: <a href="../Concepts.htm#numbers">整数</a></p>
    <p>插入 <em>Value1</em> 的位置. 随后的值插入到 Index+1, Index+2, 以此类推.</p>
  </dd>
  <dt>Value1 ...</dt>
  <dd>
    <p>要插入的一个或多个值. 要插入数组值, 请将 <code><a href="../Functions.htm#VariadicCall">theArray*</a></code> 作为最后一个参数传递.</p>
  </dd>
</dl>
<h3>备注</h3>
<p>插入 对应 <a href="#RemoveAt">移除</a>.</p>
<p>先前位于 <em>Index</em> 的项目或 <em>Index</em> 右侧的所有项目都移到右侧. 缺失的参数也会被插入, 但没有值. 例如:</p>
<pre>x := []
x.插入(1, "A", "B") <em>; =&gt;  ["A", "B"]</em>
x.插入(2, "C")      <em>; =&gt;  ["A", "C", "B"]</em>

<em>; 缺失的元素将保留:</em>
x := ["A", , "C"]
x.插入(2, "B")      <em>; =&gt;  ["A", "B",    , "C"]</em>

x := ["C"]
x.插入(1, , "B")    <em>; =&gt;  [   , "B", "C"]</em></pre>
</div>

<div class="methodShort" id="Pop"><h2>取出</h2>
<p>删除并返回最后的数组元素.</p>
<pre class="Syntax">Value := Arr.<span class="func">取出</span>()</pre>
<p>下面这些都是等同的:</p>
<pre>Value := Arr.取出()
Value := Arr.移除(Arr.长度)
Value := Arr.移除(-1)</pre>
<p>如果数组为空(<a href="#Length">长度</a> 为 0), 则抛出异常.</p>
</div>

<div class="methodShort" id="Push"><h2>置入</h2>
<p>追加值到数组的末尾.</p>
<pre class="Syntax">Arr.<span class="func">置入</span>(<span class="optional">Value, Value2, ..., Value<i>N</i></span>)</pre>
<dl>
  <dt>Value ...</dt>
  <dd><p>要插入一个或多个值. 要插入数组值, 请将 <code><a href="../Functions.htm#VariadicCall">theArray*</a></code> 作为最后一个参数传递.</p></dd>
</dl>
</div>

<div class="methodShort" id="RemoveAt"><h2>移除</h2>
<p>从数组中移除项目.</p>
<pre class="Syntax">Arr.<span class="func">移除</span>(Index <span class="optional">, 长度</span>)</pre>
<dl>
  <dt>Index</dt>
  <dd>
    <p>类型: <a href="../Concepts.htm#numbers">整数</a></p>
    <p>要删除的值的索引.</p>
  </dd>
  
  <dt>长度</dt>
  <dd>
    <p>类型: <a href="../Concepts.htm#numbers">整数</a></p>
    <p>要删除的值的范围的长度. 如果省略, 则删除一项.</p>
  </dd>
  
  <dt>返回值</dt>
  <dd><p>如果省略 <em>长度</em>, 返回删除的值(如果没有则返回空值). 否则就没有返回值.</p></dd>
</dl>
<h3>备注</h3>
<p>移除 对应 <a href="#InsertAt">插入</a>.</p>
<p>由 <em>Index</em> 和 <em>长度</em> 表示的范围必须是有效的(在数组的范围内), 但是有些元素可以是缺失值.</p>
<p><em>Pos</em> 侧的其余项将根据 <em>长度</em> 向左移动(如果省略则为 1). 例如:</p>
<pre>x := ["A", "B"]
信息框 x.移除(1)  <em>; A</em>
信息框 x[1]           <em>; B</em>

x := ["A", , "C"]
信息框 x.移除(1, 2)  <em>; 空值</em>
信息框 x[1]              <em>; C</em></pre>
</div>

<div class="methodShort" id="__New"><h2>__新建</h2>
<p>等同于 <a href="#Push">置入</a>. 通常不直接调用.</p>
<pre class="Syntax">Arr := <span class="func">数组.New</span>(<span class="optional">Value, Value2, ..., Value<i>N</i></span>)</pre>
</div>

<div class="methodShort" id="__Enum"><h2>__枚举</h2>
<p>枚举数组元素.</p>
<pre class="Syntax">遍历 Value in Arr</pre>
<pre class="Syntax">遍历 Index, Value in Arr</pre>
<p>返回一个新的<a href="Enumerator.htm">枚举器</a>. 该方法通常不直接调用. 而是将数组对象被直接传递给 <a href="../commands/For.htm">遍历-loop</a>, 其调用一次 __枚举 然后循环的每次迭代都调用一次枚举器.  每次对枚举器的调用都会返回下一个数组元素. 遍历-loop 的变量对应于枚举器的参数, 它们是:</p>
<dl>
  <dt>Index</dt>
  <dd>
    <p>类型: <a href="../Concepts.htm#numbers">整数</a></p>
    <p>数组索引, 通常与 <a href="../Variables.htm#Index">内_循环次数</a> 相同. 其仅在两参数模式下存在.</p>
  </dd>
  <dt>Value</dt>
  <dd>
    <p>值(如果没有则为空).</p>
  </dd>
</dl>
</div>

<h2 id="Properties">属性</h2>

<div class="methodShort" id="Length"><h2>长度</h2>
<p>检索或设置数组的长度.</p>
<pre class="Syntax">长度 := Arr.<span class="func">长度</span></pre>
<pre class="Syntax">Arr.<span class="func">长度</span> := 长度</pre>
<p>长度包含没有值的元素. 因增加长度而产生的索引是有效的, 但是新元素没有值(由 <a href="#Has">包含</a> 反映出来).</p>
<pre>
信息框 ["A", "B", "C"].长度  <em>;  3</em>
信息框 ["A",    , "C"].长度  <em>;  3</em>
</pre>
</div>

<div class="methodShort" id="Capacity"><h2>容量</h2>
<p>检索或设置数组的当前容量.</p>
<pre class="Syntax">Arr.<span class="func">容量</span> := MaxItems</pre>
<pre class="Syntax">MaxItems := Arr.<span class="func">容量</span></pre>
<dl>
	<dt>MaxItems</dt>
	<dd>
    <p>类型: <a href="../Concepts.htm#numbers">整数</a></p>
    <p>在必须自动扩展前, 数组可以包含最大元素数量. 如果设置的值小于 <a href="#Length">长度</a>, 则删除多的元素.</p>
  </dd>
</dl>
<pre>
x := ["A", "B", "C"]
x.置入("D")
信息框  x.容量  <em>;  6</em>
</pre>

<pre>
x := ["A", "B", "C"]
x.置入("D", "E", "F", "G")
信息框  x.容量  <em>;  7</em>
</pre>
</div>

<div class="methodShort" id="__Item"><h2>__项</h2>
<p>检索或设置数组元素的值.</p>
<pre class="Syntax">Value := Arr[Index]</pre>
<pre class="Syntax">Arr[Index] := Value</pre>
<dl>
  <dt>Index</dt>
  <dd>
    <p>类型: <a href="../Concepts.htm#numbers">整数</a></p>
    <p>一个有效的数组索引; 也就是说, 一个绝对值在 1 和 <a href="#Length">长度</a>(包括) 之间的整数.</p>
    <p>负索引可用于反向处理元素, 因此 -1 是最后一个元素, -2 是倒数第二个元素, 依此类推.</p>
    <p>尝试使用超出范围的数组索引(例如零, 或者其绝对值大于数组的 <a href="#Length">长度(长度)</a>) 被视为错误, 并将导致抛出异常.</p>
  </dd>
</dl>
<p>如上所示, 属性名 __项 通常被省略, 但在覆盖属性时使用.</p>
</div>

<h2>函数</h2>
<div class="methodShort" id="Array"><h2>数组</h2>
<p>创建一个包含指定值的数组.</p>
<pre class="Syntax">Arr := <span class="func">数组</span>(<span class="optional">Value, Value2, ..., Value<i>N</i></span>)</pre>
<p>如果在脚本中定义了这个名称的函数, 那么在同一作用域内的任何数组字元(如 <code>[]</code>) 都会产生对该函数的调用, 而不是默认的 数组 函数.</p>
</div>

</body>
</html>